package classfile

// 整数类型
type ConstantIntegerInfo struct {
	val int32
}

// 读取整数类型并且转换为int32类型
func (self *ConstantIntegerInfo) readInfo(reader *ClassReader) {
	bytes := reader.readUint32()
	self.val = int32(bytes)
}

// getter
func (self *ConstantIntegerInfo) Value() int32 {
	return self.val
}

// 浮点类型
type ConstantFloatInfo struct {
	// Java中float占4字节对应go中的float32
	val float32
}

// 读取一个int32转化为float32
func (self *ConstantFloatInfo) readInfo(reader *ClassReader) {
	bytes := reader.readUint32()
	self.val = float32(bytes)
}

// getter
func (self *ConstantFloatInfo) Value() float32 {
	return self.val
}

// 读取Long类型
type ConstantLongInfo struct {
	// Java中long占8字节对应go中的int64
	val int64
}

/*
		读取一个int64并且转化为int64
		因为long的结构如下：
		{
			u1 tag;
			u4 high_bytes;
			u4 low_bytes;
		}
	 	所以相当于需要u8即int64
*/
func (self *ConstantLongInfo) readInfo(reader *ClassReader) {
	bytes := reader.readUint64()
	self.val = int64(bytes)
}

// getter
func (self *ConstantLongInfo) Value() int64 {
	return self.val
}

// 读取 double 类型
type ConstantDoubleInfo struct {
	val float64
}

// 与long类似
func (self *ConstantDoubleInfo) readInfo(reader *ClassReader) {
	bytes := reader.readUint64()
	self.val = float64(bytes)
}

// getter
func (self *ConstantDoubleInfo) Value() float64 {
	return self.val
}
